package com.eam.asset.file.utils;

import cn.hutool.extra.pinyin.PinyinUtil;

import static com.eam.asset.file.Enum.AssetEncodeEnum.*;

/**
 * @author tzf
 * @description: 资产编码规则器, 返回的是大写的英文字母.
 * @date: 2023/11/2 9:49
 */

public class AssetEncode {
    //根据资产名称进行编码,可设置index截取长度
    public static String getEncodeByName(String name, int index) {
        if (name == null) return "";
        return PinyinUtil.getFirstLetter(name, "").toUpperCase().substring(0, Math.min(name.length(), index));
    }

    // 最大长度为4位
    public static String getEncodeByName(String name) {
        return getEncodeByName(name, 4);
    }

    //获取当前分类和名称的编码,同时需要设置编号，即序号
    public static StringBuffer getEncode(String type, String number) {
        String rootEncode = getEncodeByType(type);
        //组装分别得到
        StringBuffer buffer = new StringBuffer();
        buffer.append(rootEncode).append(number);
        return buffer;
    }

    //获取编码规则,默认根据类型生成编码规则,也可以设置编号
    //返回的对象是StringBuffer,后续可以通过append进行追加,扩展度自由
    public static StringBuffer getEncode(String type) {
        return getEncode(type, "");
    }

    public static String getEncodeByType(String type, int index) {
        if (type == null) return "";
        if (type.equals(ASSETHOUSE.getType())) {
            return ASSETHOUSE.getEncode();
        }
        if (type.equals(ASSETLAND.getType())) {
            return ASSETLAND.getEncode();
        }
        if (type.equals(ASSETPLACE.getType())) {
            return ASSETPLACE.getEncode();
        }
        if (type.equals(ASSETAD.getType())) {
            return ASSETAD.getEncode();
        }
        if (type.equals(ASSETBERTH.getType())) {
            return ASSETBERTH.getEncode();
        }
        return PinyinUtil.getFirstLetter(type, "").toUpperCase().substring(0, Math.min(type.length(), index));
    }

    //根据类型进行编码,也可以设置截取长度,返回最大长度4位
    public static String getEncodeByType(String type) {
        return getEncodeByType(type, 4);
    }

    //如果属性存在,转换成string,如果不存在,返回空字符串，避免空值异常
    public static String IfAbsent(Object obj) {
        if (obj == null) return "";
        return String.valueOf(obj);
    }
}
